home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-01
/
winlib3.zip
/
MENU.H
< prev
next >
Wrap
Text File
|
1991-01-15
|
10KB
|
293 lines
#if !defined (MENU_DEF)
#define MENU_DEF 1
#include <window.h>
#include <bstring.h>
#undef PROTO_DEF
#include <proto.h>
#ifndef UNKNOWNARGS
#ifndef __cplusplus
#define UNKNOWNARGS
#else
#define UNKNOWNARGS ...
#endif
#endif
#if defined (MENU_GLOBAL_DEF)
#define MENU_EXTERN
#else
#define MENU_EXTERN extern
#endif
/* define offsets for pop-up menu keys */
#define POPUP_UPKEY 0
#define POPUP_DOWNKEY 1
#define POPUP_ACCEPTKEY 2
#define POPUP_QUITKEY 3
#define POPUP_HOMEKEY 4
#define POPUP_ENDKEY 5
#define POPUP_RIGHTKEY 6
#define POPUP_LEFTKEY 7
#define POPUP_PULLDOWN_QUITKEY 8
#define NUMPOPUPKEYS 9
#define POPUP_EXIT 1
#define BAR_EXIT 2
#define PULLDOWN_EXIT 3
#define PULLDOWN_POPUP_EXIT 4
#define PULLDOWN_CONTINUE 5
/* define offsets for bar menu keys */
#define BAR_RIGHTKEY 0
#define BAR_LEFTKEY 1
#define BAR_ACCEPTKEY 2
#define BAR_QUITKEY 3
#define BAR_HOMEKEY 4
#define BAR_ENDKEY 5
#define NUMBARKEYS 6
#define BARWRAP 1
#define BARSTATIC 2
#define BARCONFIRM 4
#define BARDISPLAY 8
#define BAROVERRIDE 16
#define POPUPWRAP 1
#define POPUPSTATIC 2
#define POPUPCONFIRM 4
#define POPUPDISPLAY 8
#define POPUPOVERRIDE 16
/********** Popup return values for user-defined functions **********/
#define POPUP_CONTINUE 0
#define POPUP_MOVE_UP 1
#define POPUP_MOVE_DOWN 2
#define POPUP_DO_CHOICE 3
#define POPUP_MOVE_CONTINUE 4
#define POPUP_ESCAPE 5
#define POPUP_MOVE_LEFT 6
#define POPUP_MOVE_RIGHT 7
#define POPUP_MOVE_HOME 8
#define POPUP_MOVE_END 9
#define POPUP_PULLDOWN_QUIT 10
/********** Bar return values for user-defined functions **********/
#define BAR_CONTINUE 0
#define BAR_MOVE_RIGHT 1
#define BAR_MOVE_LEFT 2
#define BAR_DO_CHOICE 3
#define BAR_MOVE_CONTINUE 4
#define BAR_ESCAPE 5
#define BAR_MOVE_HOME 6
#define BAR_MOVE_END 7
#define MOVE_CONTINUE_DONE -1
#define ENTRYCOLOR 0
#define BORDERCOLOR 1
#define HOTKEYCOLOR 2
#define HIGHLIGHTCOLOR 3
#define UNAVAILCOLOR 4
#define NUMPOPUPCOLORS 5
#define NUMBARCOLORS 5
typedef struct
{
unsigned int wrap_around:1; /* menu highlight bar wrap */
unsigned int static_menu:1; /* menu is displayed while performing
* function */
unsigned int confirm_flag:1; /* confirmation function when hotkey is
* pressed */
unsigned int open_flag:1; /* menu is activated ? */
unsigned int pulldown_flag:1; /* menu is part of pulldown system? */
unsigned int display_flag:1; /* menu is displayed even after exiting? */
unsigned int override:1; /* unavailable entries are still processed? */
} POPUP_MENU_STATUS, BAR_MENU_STATUS;
typedef struct
{
char *entry_name;
unsigned row;
char hotkey_letter;
unsigned int ext_hotkey;
int (*func)(UNKNOWNARGS);
} POPUP_MENU_ENTRY;
typedef struct popmenu
{
WPOINTER w;
POPUP_MENU_ENTRY *menu_select;
unsigned menu_color[NUMPOPUPCOLORS];
unsigned menu_key[NUMPOPUPKEYS];
POPUP_MENU_STATUS popmenu_flags;
BITSTRING active_entry;
int pwidth;
unsigned last_entry;
int exp_method;
int (*confirm_func)(struct popmenu *, unsigned);
} POPUP_MENU, *POPUP_MENU_PTR;
#define POPUP_WRAP_ON(p) (p)->popmenu_flags.wrap_around
#define POPUP_STATIC_ON(p) (p)->popmenu_flags.static_menu
#define POPUP_EXPLODE(p) (p)->popmenu_flags.explode_flag
#define POPUP_CONFIRM_ON(p) (p)->popmenu_flags.confirm_flag
#define POPUP_OPEN(p) (p)->popmenu_flags.open_flag
#define POPUP_PULLDOWN_ON(p) (p)->popmenu_flags.pulldown_flag
#define POPUP_DISPLAY_ON(p) (p)->popmenu_flags.display_flag
#define POPUP_OVERRIDE_ON(p) (p)->popmenu_flags.override
void menu_init();
typedef struct
{
char *entry_name;
int row;
int col;
unsigned char hotkey_letter;
unsigned int ext_hotkey;
int (*func)(UNKNOWNARGS);
} BAR_MENU_ENTRY;
typedef struct barmenu
{
WPOINTER w;
BAR_MENU_ENTRY *menu_select;
unsigned menu_color[NUMBARCOLORS];
unsigned menu_key[NUMBARKEYS];
BAR_MENU_STATUS barmenu_flags;
BITSTRING active_entry;
int *width;
int exp_method;
unsigned last_entry;
int (*confirm_func)(struct barmenu *, unsigned);
} BAR_MENU, *BAR_MENU_PTR;
#define BAR_WRAP_ON(b) (b)->barmenu_flags.wrap_around
#define BAR_STATIC_ON(b) (b)->barmenu_flags.static_menu
#define BAR_EXPLODE(b) (b)->barmenu_flags.explode_flag
#define BAR_CONFIRM_ON(b) (b)->barmenu_flags.confirm_flag
#define BAR_OPEN(b) (b)->barmenu_flags.open_flag
#define BAR_DISPLAY_ON(b) (b)->barmenu_flags.display_flag
#define BAR_OVERRIDE_ON(b) (b)->barmenu_flags.override
#define BAR_PULLDOWN_ON(b) (b)->barmenu_flags.pulldown_flag
typedef struct pullmenu
{
BAR_MENU_PTR barmenu;
POPUP_MENU_PTR *popupmenu;
} PULLDOWN_MENU, *PULLDOWN_MENU_PTR;
PULLDOWN_MENU_PTR CreatePulldownMenu();
/* Up to here */
MENU_EXTERN int (*popup_undef_key) P((POPUP_MENU_PTR p, unsigned key,
unsigned *entry));
MENU_EXTERN int (*bar_undef_key) P((BAR_MENU_PTR b, unsigned key,
unsigned *entry));
MENU_EXTERN void (*global_bar_prefunc) P((BAR_MENU_PTR, unsigned));
MENU_EXTERN void (*global_popup_prefunc) P((POPUP_MENU_PTR, unsigned));
MENU_EXTERN unsigned popup_key_definition[NUMPOPUPKEYS];
MENU_EXTERN unsigned bar_key_definition[NUMBARKEYS];
#if __cplusplus
extern "C"
{
#endif
int BarAssignColors P((BAR_MENU_PTR barptr, unsigned *colors));
int BarAssignKeys P((BAR_MENU_PTR barptr, unsigned *keys));
int BarChangeEntryString P((BAR_MENU_PTR barptr, unsigned entry,
char *string));
BAR_MENU_PTR BarCreateMenu P((BAR_MENU_ENTRY *entries, unsigned *colors,
int row, int col, WPOINTER (*wfunc)(void)));
int BarMakeEntryAvailable P((BAR_MENU_PTR barptr, unsigned entry));
int BarMakeEntryUnavailable P((BAR_MENU_PTR barptr, unsigned entry));
int BarMenuFree P((BAR_MENU_PTR barptr));
int BarSetExplosionType P((BAR_MENU_PTR barptr, int effect));
int BarSetOptions P((BAR_MENU_PTR barptr, int options, int flag));
int BarSelectMenu P((BAR_MENU_PTR barptr, int rank,
unsigned entry));
int BarSetConfirmFunction P((BAR_MENU_PTR barptr,
int (*cfunc)(BAR_MENU_PTR, unsigned)));
int PopupAssignColors P((POPUP_MENU_PTR popptr, unsigned *colors));
int PopupAssignKeys P((POPUP_MENU_PTR popptr, unsigned *keys));
POPUP_MENU_PTR PopupCreateMenu P((POPUP_MENU_ENTRY *entries, unsigned *colors,
unsigned row, unsigned col, int wheight,
WPOINTER (*wfunc)(void),
VWPOINTER (*vwfunc)(void)));
int PopupMakeEntryAvailable P((POPUP_MENU_PTR popptr,
unsigned entry));
int PopupMakeEntryUnavailable P((POPUP_MENU_PTR popptr,
unsigned entry));
int PopupSelectMenu P((POPUP_MENU_PTR popptr, int rank,
unsigned entry));
int PopupSetOptions P((POPUP_MENU_PTR popptr, unsigned options,
int flag));
int PopupChangeEntryString P((POPUP_MENU_PTR popptr,
unsigned entry, char *string));
int PopupSetExplosionType P((POPUP_MENU_PTR popptr, int effect));
int PopupSetConfirmFunction P((POPUP_MENU_PTR popptr,
int (*cfunc)(POPUP_MENU_PTR, unsigned)));
int PopupMenuFree P((POPUP_MENU_PTR popptr));
PULLDOWN_MENU_PTR PulldownCreateMenu P((POPUP_MENU_PTR popptrs[],
BAR_MENU_PTR barptr, int adjust));
int PulldownSelectMenu P((PULLDOWN_MENU_PTR pullptr, int rankbar,
unsigned startbar, int *rankpop,
unsigned *startpop,
int imode));
int PulldownMenuFree P((PULLDOWN_MENU_PTR pullptr));
int PulldownMenuFreeAll P((PULLDOWN_MENU_PTR pullptr));
#if defined (SOURCE)
#include <mintern.h>
#endif
#if __cplusplus
}
#endif
/* Other defines */
#define BAR_NULL_PTR ((BAR_MENU_PTR)0)
#define POPUP_NULL_PTR ((POPUP_MENU_PTR)0)
#define PULLDOWN_NULL_PTR ((PULLDOWN_MENU_PTR)0)
#define BAR_ENTRY_NULL ((BAR_MENU_ENTRY *)0)
#define POPUP_ENTRY_NULL ((POPUP_MENU_ENTRY *)0)
#define POPUP_STRING_IN_WINDOW(p,e) \
(((p)->w->vwrow+(p)->w->height-1) > ((p)->menu_select[(e)-1].row) ? 1:0)
#define POPUP_ENTRY_AVAILABLE(p,e) (test_bit(&(p)->active_entry,(e)-1))
#define POPUP_WINDOW(p) ((p)->w)
#define POPUP_VIRTUAL_WINDOW(p) ((p)->w->vwptr)
#define POPUP_ENTRY_STRING(p,e) ((p)->menu_select[(e)-1].entry_name)
#define BAR_ENTRY_AVAILABLE(b,e) (POPUP_ENTRY_AVAILABLE((b),(e)))
#define BAR_WINDOW(b) ((b)->w)
#define BAR_ENTRY_STRING(b,e) ((b)->menu_select[(e)-1].entry_name)
#endif